// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
// #include "windows.h"
// // 定义链栈的结构体
// typedef struct Node {
//     int data;          // 存储栈元素的数据部分
//     struct Node* next; // 指向下一个节点的指针
// } Node;
//
// typedef struct {
//     Node* top;  // 栈顶指针
// } LinkedStack;
//
// // 初始化栈
// void initStack(LinkedStack* stack) {
//     stack->top = NULL;  // 初始化时栈为空，栈顶指针为NULL
// }
//
// // 判断栈是否为空
// bool StackEmpty(LinkedStack* stack) {
//     return stack->top == NULL;  // 如果栈顶指针为NULL，说明栈为空
// }
//
// // 进栈操作
// void Push(LinkedStack* stack, int value) {
//     Node* newNode = (Node*)malloc(sizeof(Node));  // 创建新节点
//     if (!newNode) {  // 检查内存分配是否成功
//         printf("内存分配失败!\n");
//         return;
//     }
//     newNode->data = value;       // 将值存入新节点
//     newNode->next = stack->top;  // 新节点指向当前栈顶
//     stack->top = newNode;        // 更新栈顶指针
// }
//
// // 出栈操作
// bool Pop(LinkedStack* stack, int* value) {
//     if (StackEmpty(stack)) {  // 如果栈为空，无法出栈
//         printf("栈为空，无法出栈!\n");
//         return false;
//     }
//     Node* temp = stack->top;   // 暂存栈顶节点
//     *value = temp->data;       // 获取栈顶数据
//     stack->top = stack->top->next; // 更新栈顶指针
//     free(temp);                // 释放栈顶节点的内存
//     return true;
// }
//
// // 获取栈顶元素
// bool GetTop(LinkedStack* stack, int* value) {
//     if (StackEmpty(stack)) {  // 如果栈为空，无法获取栈顶元素
//         printf("栈为空，无法获取栈顶元素!\n");
//         return false;
//     }
//     *value = stack->top->data;  // 获取栈顶元素
//     return true;
// }
//
// // 打印栈中的所有元素
// void PrintStack(LinkedStack* stack) {
//     if (StackEmpty(stack)) {
//         printf("栈为空，无法输出元素!\n");
//         return;
//     }
//
//     Node* current = stack->top;  // 从栈顶开始遍历
//     printf("栈中的元素: ");
//     while (current != NULL) {
//         printf("%d ", current->data);
//         current = current->next;  // 移动到下一个节点
//     }
//     printf("\n");
// }
//
// // 测试代码
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     LinkedStack stack;
//     int value;
//
//     // 初始化栈
//     initStack(&stack);
//
//     // 进栈操作
//     Push(&stack, 10);
//     Push(&stack, 20);
//     Push(&stack, 30);
//
//     // 打印栈中的所有元素
//     PrintStack(&stack);
//
//     // 获取栈顶元素
//     if (GetTop(&stack, &value)) {
//         printf("栈顶元素: %d\n", value);
//     }
//
//     // 出栈操作
//     if (Pop(&stack, &value)) {
//         printf("出栈元素: %d\n", value);
//     }
//
//     // 打印栈中的所有元素
//     PrintStack(&stack);
//
//     return 0;
// }
